#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<iostream>
#include<QListWidgetItem>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    listnum=0;
    setWindowTitle("物品管理系统");
    head=nullptr;
    tail=nullptr;
    blscheck=0;
    //设置按钮图片
    QIcon mG(":/myImage/fragment1.png");
    ui->memoryGame->setWindowIcon(mG);
    ui->memoryGame->setIconSize(QSize(85,85));
//    ui->memoryGame->setIcon(mG);
    //初始化tableView
    QStandardItemModel* model = new QStandardItemModel();
    QStringList labels;
    labels <<"名称" << "位置" << "数量" <<"标签";
    model->setHorizontalHeaderLabels(labels);
    ui->tableView->setModel(model);
    //不可编辑
    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    //默认功能添加
    option=1;

}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow:: acceptSignup(){
    this->show();


};
//通讯录查找物品
 void MainWindow::checki_show(QString str1){
    //读取输入物品
     items*cur=head;
     bool flag=0;//看看是否操作
    for(int j=0;j<listnum;j++){
        if(cur->i_name==str1){
            flag=1;
            //输出信息
            //可以使用QStringListModel来设置QListView的数据源
            QStringListModel *model = new QStringListModel(this);
            QStringList list;
            list.append("已找到！");
            list.append(cur->i_name);
            QString num=QString::number(cur->num);
            list.append("数量"+num);
            list.append("位置："+cur->location);
            list.append("标签："+cur->tag);
            model->setStringList(list);
            ui->listView->setModel(model);
            break;
        }
        else cur=cur->next;
    }
    if(flag!=1){
        //提示没有该物品，请检查输入。
        QStringListModel *model = new QStringListModel(this);
        QStringList list;
        list.append("未找到！");
        list.append("请检查输入");
        model->setStringList(list);
        ui->listView->setModel(model);
    }

};
//通讯录添加物品
void MainWindow::addi(QString str1,QString l,int num){

   if(listnum==0){
       items*temp= new items(str1,l,num);
       temp->setTag(ui->itemTag->text());
       head=temp;
       head->next=nullptr;
       tail=head;
       listnum++;
       QStringListModel *model = new QStringListModel(this);
       QStringList list;
       list.append("已添加！");
       list.append(str1);
       QString num1=QString::number(num);
       list.append("数量:"+num1);
       list.append("位置："+l);
       list.append("标签："+ui->itemTag->text());
       model->setStringList(list);
       ui->listView->setModel(model);
   }
   else{
    bool flag=false;
      items*cur=head;
    for(int j=0;j<listnum;j++){
       //查找到该物品，数量++
       if(cur->i_name==str1){
           cur->num+=num;
           //找到跳出循环
           flag=1;
           QStringListModel *model = new QStringListModel(this);
           QStringList list;
           list.append("已添加！");
           list.append(str1);
           QString num1=QString::number(cur->num);
           list.append("数量"+num1);
           list.append("位置："+l);
           list.append("标签："+ui->itemTag->text());
           model->setStringList(list);
           ui->listView->setModel(model);
           break;
         }
       else cur=cur->next;
    }
    //如果没找到
       if(flag!=1){
        items*temp= new items(str1,l,num);
        temp->setTag(ui->itemTag->text());
        tail->next=temp;
        tail=temp;
        tail->next=nullptr;
        listnum++;
    }
   }

};
//显示物品
void MainWindow::showi(){
    if(listnum!=0){
    items*cur=head;
    //可以使用QStringListModel来设置QListView的数据源
    QStringListModel *model = new QStringListModel(this);
    QStringList list;
    for(int i=0;i<listnum;i++){
    list.append(cur->i_name);
    cur = cur->next; // 移动指针到下一个节点
    }
    model->setStringList(list);
    ui->listView->setModel(model);
}
    else{
        QMessageBox::information(NULL,"错误！","未添加物品");
    }
}
//表格显示物品
void MainWindow::tableshow(){
    QStandardItem *item = 0;
    QStandardItemModel *model = new QStandardItemModel(this);
    if(head!=nullptr){
    items*cur=head;
    for(int i = 0;i < listnum;i++)
    {
        item = new QStandardItem(cur->i_name);
        // 将内容居中显示
        item->setTextAlignment(Qt::AlignCenter);
        model->setItem(i,0,item);
        //位置
        item = new QStandardItem(cur->location);
        item->setTextAlignment(Qt::AlignCenter);
        model->setItem(i,1,item);
        //数量
        int num = cur->num;
        QString strNum = QString::number(num);
        item = new QStandardItem(strNum);
        item->setTextAlignment(Qt::AlignCenter);
        //标签
        model->setItem(i,2,item);
        item = new QStandardItem(cur->tag);
        item->setTextAlignment(Qt::AlignCenter);
        model->setItem(i,3,item);
        cur=cur->next;
    }
    QStringList labels;
    labels <<"名称" << "位置" << "数量" <<"标签";
    model->setHorizontalHeaderLabels(labels);

    ui->tableView->setModel(model);
    //不可编辑
    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    // 将内容居中显示

    }


}
//通讯录删除物品
void MainWindow::deletei(QString str1){

    items*temp=head;
    items*t2=head->next;
    bool flag=0;//看看是否操作
   for(int j=0;j<listnum;j++){
       if(temp->i_name==str1){
           flag=1;
           if(temp->next!=nullptr){
           t2->next=temp->next;
           temp->next=nullptr;}
           else {
               if(temp->i_name==head->i_name) head=tail=nullptr;
               else t2->next=nullptr;
           }
       }
       else {
           t2=temp;
           temp=temp->next;}
   }
   //提示物品已经成功删除
   if(flag){
       listnum--;
       //可以使用QStringListModel来设置QListView的数据源
       QStringListModel *model = new QStringListModel(this);
       QStringList list;
       list.append("成功删除");
       list.append(str1);
       model->setStringList(list);
       ui->listView->setModel(model);
   }
   //提示该物品不存在，请检查输入
   else{
       QStringListModel *model = new QStringListModel(this);
       QStringList list;
       list.append("未找到！");
       list.append("请检查输入");
       model->setStringList(list);
       ui->listView->setModel(model);
   }

};


void MainWindow::on_OKbtn_clicked()
{

    QString name=ui->itemname->text();
    QString location=ui->itemaddress->text();
    QString str = ui->numspinBox->text();  // 获取文本框中的字符串
    int n = str.toInt();  // 将字符串转换为整数
    switch(option){
    case 1:
        addi(name,location,n);
        break;
    case 2:
        checki_show(name);
        break;
    case 3:
        deletei(name);
        break;     }

    update();
}



void MainWindow::on_checkBox_clicked(bool checked)
{
    if(checked){
        blscheck=1;
        tableshow();
    }
   else{
        blscheck=0;
        ui->tableView->clearSpans();
        QStandardItemModel* model = new QStandardItemModel();
        QStringList labels;
        labels <<"名称" << "位置" << "数量" <<"标签";
        model->setHorizontalHeaderLabels(labels);
        ui->tableView->setModel(model);
        //不可编辑
        ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    }
}
//void MainWindow::openFileOption()
//{
//    // 在堆上创建fileoption对象，并将MainWindow指针传递给构造函数
//    fileoption*fo= new fileoption(this);
//    fo->openFile();

//}
void  MainWindow::update(){
    if(blscheck){
    tableshow();
    if(option==1)
    showi();
    }
}
void MainWindow::on_memoryGame_clicked()
{   this->close();
    emit emitTgame();
}

//选择功能
void MainWindow::on_cheBtn_toggled(bool checked)
{
    option=2;
}

void MainWindow::on_addBtn_toggled(bool checked)
{
    option=1;
}

void MainWindow::on_delBtn_toggled(bool checked)
{
    option=3;
}
